import random
from http import HTTPStatus
from dashscope.api_entities.dashscope_response import Role
import dashscope

dashscope.api_key = "xxxxxxxxxxxxxxxxxxxxxx"   # 请将此处替换为自己的API Key

# 初始化对话历史记录
"""
# 需要导入from dashscope.api_entities.dashscope_response import Role
{
    "role": Role.USER,    # 此处是 'user'，代表着用户
     "content": "content"    # 此处用户输入的内容
}
 
{
    "role": Role.SYSTEM    # 此处是 'system'，代表着是此次对话的标题（用过chatgpt的应该了解）
    "content": "content"    # 此处是对话的第一句话也是标题。
}
 
{
    "role": Role.ASSISTANT    # 此处是 'assistant'，代表着机器人（api）
    "content": "content"    # 机器人的输出
}
 
# 这些都用一个列表存储在一起
# 因此，我们可以通过这种方式存储对话的缓存，也可以自定义对话内容。
"""
dialog_history = [
    {'role': Role.SYSTEM, 'content': '我是谁'},
    {'role': Role.USER, 'content': '介绍自己'},
    {'role': Role.ASSISTANT, 'content': '好的，我记住了！'}
]

def multi_round_conversation(content):    
    global dialog_history

    # 将用户输入添加到对话历史中
    dialog_history.append({'role': Role.USER, 'content': content})

    response = dashscope.Generation.call(
        'qwen-max-1201',       # 此处是 'qwen-max-1201'，请将此处替换为自己的模型名称
        messages=dialog_history,
        seed=random.randint(1, 1000),
        result_format='message'
    )

    if response.status_code == HTTPStatus.OK:
        # print(response)
        assistant_message = {
            'role': response.output.choices[0]['message']['role'],
            'content': response.output.choices[0]['message']['content']
        }
        dialog_history.append(assistant_message)  # 将AI助手的回答添加到对话历史中
        print('AI助手：', assistant_message['content'])
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))

while True:
    # 获取最新一轮的用户输入
    content = input('你：')
    if content == 'exit':
        break
    multi_round_conversation(content)
    